package com.hvgroup.modules.dify.web;

import com.hvgroup.annotation.rest.AnonymousGetMapping;
import com.hvgroup.annotation.rest.AnonymousPostMapping;
import com.hvgroup.modules.dify.service.DifyAppService;
import com.hvgroup.modules.dify.service.dto.AppsDto;
import com.hvgroup.modules.dify.service.dto.AppsQueryCriteria;
import com.hvgroup.utils.SecurityUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Map;

@Slf4j
@RestController
@RequiredArgsConstructor
@Api(tags = "运维：应用管理")
@RequestMapping("/dify/apps")
public class DifyAppController {

    private final DifyAppService difyAppService;

    @ApiOperation(value = "查询应用")
    @AnonymousPostMapping("/group")
    public ResponseEntity<Map<String, List<AppsDto>>> queryGroupApps(@RequestBody AppsQueryCriteria criteria) {
        return new ResponseEntity<>(difyAppService.queryGroupApps(criteria), HttpStatus.OK);
    }

    @ApiOperation(value = "查询应用")
    @AnonymousPostMapping("/group2")
    public ResponseEntity<Map<String, List<AppsDto>>> queryGroupApps2(@RequestBody AppsQueryCriteria criteria) {
        return new ResponseEntity<>(difyAppService.queryGroupApps2(criteria), HttpStatus.OK);
    }


    @ApiOperation(value = "查询应用")
    @AnonymousGetMapping("/platform/selected")
    public ResponseEntity<List<Map<String, String>>> queryPlatform() {
        return new ResponseEntity<>(difyAppService.queryPlatform(), HttpStatus.OK);
    }



//
//    @AnonymousPostMapping("/test")
//    public void sendChatMessage() {
//        String baseUrl = "http://10.0.0.20:18000";
//        String apiKey = "app-KO5p0uPnHLyaLxUNXGZsJYxn"; // 替换为真实 token
//
//        WebClient webClient= WebClient.builder()
//                .baseUrl(baseUrl)
//                .defaultHeader(HttpHeaders.AUTHORIZATION, "Bearer " + apiKey)
//                .build();
//
//        Map<String, Object> param = new HashMap<>();
//        param.put("inputs", new HashMap<>());
//        param.put("query", "What are the specs of the iPhone 13 Pro Max?");
//        param.put("response_mode", "streaming");
//        param.put("conversation_id", "");
//        param.put("user", "abc-123");
//
//        Map<String, Object> file = new HashMap<>();
//        file.put("type", "image");
//        file.put("transfer_method", "remote_url");
//        file.put("url", "https://cloud.dify.ai/logo/logo-site.png");
//
//        param.put("files", new Object[]{file});
//
//        Flux<String> responseFlux = webClient.post()
//                .uri("/v1/chat-messages")
//                .contentType(MediaType.APPLICATION_JSON)
//                .accept(MediaType.TEXT_EVENT_STREAM)
//                .bodyValue(param)
//                .retrieve()
//                .bodyToFlux(String.class)
//                .flatMap(chunk -> {
//                    System.out.println(chunk);
//                    Map<String, Object> map = JSON.parseObject(chunk, Map.class);
//
//                    if ("workflow_started".equals(map.get("event"))) {
//                        Map<String, Object> data = (Map<String, Object>) map.get("data");
//                        Map<String, Object> inputs = (Map<String, Object>) data.get("inputs");
//                        System.err.println(JSON.toJSONString(inputs));
//                        return Flux.just(chunk); // 可做进一步处理
//                    }
//
//                    if (!"node_finished".equals(map.get("event"))) {
//                        return Flux.just(chunk); // 可做进一步处理
//                    }
//
//
//                    if ("workflow_finished".equals(map.get("event"))) {
//                        Map<String, Object> data = (Map<String, Object>) map.get("data");
//                        if (!"succeeded".equals(data.get("status"))) {
//                            log.error(String.valueOf(map.get("error")));
//                            return Flux.just(chunk);
//                        }
//
//                        Map<String, Object> outputs = (Map<String, Object>) data.get("outputs");
//                        System.err.println(outputs.get("answer"));
//
//                        Integer total_tokens = (Integer) data.get("total_tokens");
//                        System.err.println(total_tokens);
//                        return Flux.just(chunk); // 可做进一步处理
//                    }
//                    // 使用模式, 如何将
//                    Map<String, Object> data = (Map<String, Object>) map.get("data");
//                    if ("1747795451033".equals(data.get("predecessor_node_id"))) {
//                        if (!"succeeded".equals(data.get("status"))) {
//                            log.error(String.valueOf(map.get("error")));
//                            return Flux.just(chunk);
//                        }
//
//
//                        Map<String, Object> outputs = (Map<String, Object>) data.get("outputs");
//                        System.err.println(outputs.get("text"));
//
//                        Map<String, Object> usage = (Map<String, Object>) outputs.get("usage");
//                        if (usage != null) {
//                            System.err.println(usage.get("completion_tokens"));
//                            System.err.println(usage.get("total_tokens"));
//                        }
//
//                        return Flux.just(chunk); // 可做进一步处理
//                    }
//
//                    return Flux.just(chunk); // 可做进一步处理
//                })
//                .doOnError(error -> System.err.println("请求出错: " + error.getMessage()));
//
//        responseFlux.subscribe(); // 启动异步消费
//    }


}
